From caeab9b2e04d046e86a003c8ed387fe6d63be641 Mon Sep 17 00:00:00 2001 From: "vhanquez@kneesa.uk.xensource.com" Date: Tue, 24 Jan 2006 10:55:45 +0000 Subject: [PATCH] fixup memory leak and return value, if malloc or realloc fail. Signed-off-by: Vincent Hanquez --- tools/xenstore/utils.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/xenstore/utils.c b/tools/xenstore/utils.c index f8bf989c22..6655777bcd 100644 --- a/tools/xenstore/utils.c +++ b/tools/xenstore/utils.c @@ -96,21 +96,29 @@ void *grab_file(const char *filename, unsigned long *size) return NULL; buffer = malloc(max+1); + if (!buffer) + goto error; *size = 0; while ((ret = read(fd, buffer + *size, max - *size)) > 0) { *size += ret; if (*size == max) { + void *nbuffer; max *= 2; - buffer = realloc(buffer, max + 1); + nbuffer = realloc(buffer, max + 1); + if (!nbuffer) + goto error; + buffer = nbuffer; } } - if (ret < 0) { - free(buffer); - buffer = NULL; - } else - ((char *)buffer)[*size] = '\0'; + if (ret < 0) + goto error; + ((char *)buffer)[*size] = '\0'; close(fd); return buffer; +error: + free(buffer); + close(fd); + return NULL; } void release_file(void *data, unsigned long size __attribute__((unused))) -- 2.30.2